/* C库中的rand函数没有参数，并且返回一个0~RAND_MAX范围内的伪随机整数。
 * 它在POSIX标准中被列为对多线程化应用程序不安全的。
 * 
 * 该程序显示的是randsafe函数的实现，它使用rand函数为每个进程产生一个0~1范围内的伪随机双精度序列。
 * 
 * 要注意的是，rand函数不是一个特别好的生成器，因此randsafe函数也不是。要避免在实际的应用程序中使用他们
 */
#include "randsafe.h"

int randsafe (double *ranp) {
    int error;
    pthread_mutex_t rand_pth = PTHREAD_MUTEX_INITIALIZER;

    if (error = pthread_mutex_lock(&rand_pth)) 
        return error;
    
    *ranp = (rand() + 0.5) / (RAND_MAX + 1.0);

    return pthread_mutex_unlock(&rand_pth);
}